/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Control;

import javax.swing.JTable;

/**
 *
 * @author Camilo
 */
public class EstadisticaK {
    
    public Celda[][][] policotomizacion(Celda[][][] Datos, JTable indice){
        int nColum = indice.getColumnCount();
        int nFilas = indice.getRowCount();
        int numerodeRegistros = 0;
        for(int i = 0; i < nFilas; i++){
            numerodeRegistros = 0;
            for(int j = 0; j < nColum; j++){
               numerodeRegistros += Integer.parseInt((String)indice.getValueAt(i, j));
            }
            Celda[] listaTemp = new Celda[numerodeRegistros];
            int count = 0;
            for(int j = 0; j < nColum; j++){
                String cadena = (String) indice.getValueAt(i, j); 
                int z = Integer.parseInt(cadena);
                for(int k = 0; k < z; k++){
                    listaTemp[count]=Datos[i][j][k];
                    count++;                   
                }
            }
            listaTemp = organizarLista(listaTemp);
            listaTemp = definirOrden(listaTemp);
            Datos = organizaOrden(Datos, listaTemp);
            
        }
        return Datos;
    }
    
    
    public Celda[] organizarLista(Celda[] lista) {
        int numeroRegistros = lista.length;
        Celda temp = new Celda();
        for(int i = 0 ; i < numeroRegistros; i++){
            for( int j = 0 ; j < numeroRegistros-1 ; j++){
                if ( lista[i].getValor() <  lista[j].getValor()) {
                    temp = lista[i];
                    lista[i] = lista[j];
                    lista[j] = temp;
                }
            }
        }
        return lista;
    }
    
    public Celda[] definirOrden (Celda[] lista){
        int numeroRegistros = lista.length;
        for(int i = 0 ; i < numeroRegistros; i++){
            lista[i].setOrden(i+1);
        }
        return lista;
    }
    
    public Celda[][][] organizaOrden(Celda[][][] datos, Celda[] lista){
        int numeroRegistros = lista.length;
        for(int i = 1 ; i < numeroRegistros; i++){
            datos[lista[i].getX()][lista[i].getY()][lista[i].getZ()]=lista[i];
        }
        return datos;
    }
    
    public int calculoPorFila(Celda[][][] datos, int[][] indices, int fila , int nColum, int nFilas){
        int indiceInterno;
        int valor = 0;
        for (int i = 0 ; i < nColum ; i++){
            indiceInterno = indices[fila][i];
            for ( int j = 0 ; j < indiceInterno ; j++){
                valor += datos[fila][i][j].getOrden();
            }
        }
        return valor;
    }
    
    public int calculoPorColumna(Celda[][][] datos, int[][] indices, int columna , int nColum, int nFilas){
        int indiceInterno;
        int valor = 0;
        for (int i = 0 ; i < nFilas ; i++){
            indiceInterno = indices[i][columna];
            for ( int j = 0 ; j < indiceInterno ; j++){
                valor += datos[i][columna][j].getOrden();
            }
        }
        return valor;
    }
    
    public int[][] calculoPorCeldas(Celda[][][] datos, int[][] indices, int nColum, int nFilas){
        int[][] resultado = new int[nFilas][nColum];
        int ind;
        for(int i = 0 ; i < nFilas ; i++){
            for(int j = 0 ; j < nColum ; j++){
                ind = indices[i][j];
                for (int k = 0 ; k < ind ; k++){
                    resultado[i][j] +=  datos[i][j][k].getOrden();
                }
            }
        }
        return resultado;
    }
    public int TotalMK (int[][] sumaMCelda, int filas, int colum){
        int x = 0;
        for (int i=0; i < filas; i++){
            for (int j=0; j< colum; j++){
                x += sumaMCelda[i][j];
            }
        }
        return x;
    }
    
    public int[] calculoDatosPorColumna(int[][] indices, int columnas, int filas){
        int[] datosPorColumnas = new int[columnas];
        for (int j = 0; j < columnas; j++) {
            datosPorColumnas[j] = 0;
            for (int i = 0; i < filas; i++) {
                datosPorColumnas[j] += indices[i][j];
            }
        }
        return datosPorColumnas;
    }
    
    public int[] calculoDatosPorFila(int[][] indices, int columnas, int filas){
        int[] datosPorFila = new int[columnas];
        for (int j = 0; j < columnas; j++) {
            datosPorFila[j] = 0;
            for (int i = 0; i < filas; i++) {
                datosPorFila[j] += indices[i][j];
            }
        }
        return datosPorFila;
    }    
    
}
